#ifndef AUDIO_HANDLER_H
#define AUDIO_HANDLER_H

#include <stdbool.h>
#include <stdint.h>

// 音频状态枚举
typedef enum
{
    AUDIO_IDLE,
    AUDIO_RECORDING,
    AUDIO_PLAYING,
    AUDIO_ERROR
} audio_state_t;

// 音频格式结构
typedef struct
{
    uint16_t sample_rate;
    uint8_t channels;
    uint8_t bits_per_sample;
    uint32_t duration_ms;
} audio_format_t;

// 音频统计信息
typedef struct
{
    float rms_level;
    float peak_level;
    float snr_db;
    bool voice_detected;
    uint32_t samples_processed;
} audio_stats_t;

// 函数声明

/**
 * 初始化音频处理模块
 * @return 0成功，-1失败
 */
int audio_handler_init(void);

/**
 * 开始录音
 * @return 0成功，-1失败
 */
int audio_start_recording(void);

/**
 * 停止录音
 * @return 0成功，-1失败
 */
int audio_stop_recording(void);

/**
 * 播放音频数据
 * @param data 音频数据缓冲区
 * @param size 数据大小（采样点数）
 * @return 0成功，-1失败
 */
int audio_play_data(uint16_t *data, int size);

/**
 * 停止播放
 * @return 0成功，-1失败
 */
int audio_stop_playing(void);

/**
 * 获取录音数据
 * @param data 输出缓冲区
 * @param max_size 最大大小
 * @return 实际获取的数据大小，-1失败
 */
int audio_get_recording_data(uint16_t *data, int max_size);

/**
 * 检测语音活动
 * @return true检测到语音，false无语音
 */
bool audio_detect_voice_activity(void);

/**
 * 设置音量
 * @param vol 音量值（0.0-1.0）
 */
void audio_set_volume(float vol);

/**
 * 获取音量
 * @return 当前音量值
 */
float audio_get_volume(void);

/**
 * 设置静音
 * @param is_mute true静音，false取消静音
 */
void audio_set_mute(bool is_mute);

/**
 * 获取音频状态
 * @return 当前音频状态
 */
audio_state_t audio_get_state(void);

/**
 * 音频处理循环（在主循环中调用）
 */
void audio_process(void);

/**
 * 获取音频统计信息
 * @param stats 输出统计信息
 */
void audio_get_stats(audio_stats_t *stats);

/**
 * 音频自动增益控制
 * @param enable true启用，false禁用
 */
void audio_set_agc(bool enable);

/**
 * 音频降噪
 * @param enable true启用，false禁用
 */
void audio_set_noise_reduction(bool enable);

/**
 * 回音消除
 * @param enable true启用，false禁用
 */
void audio_set_echo_cancellation(bool enable);

#endif // AUDIO_HANDLER_H